package map;

import java.util.HashMap;
import java.util.Map;

/**
 * java.util.Map接口
 * Map(查找表),体现的结构是一个多行两列的表格,左列称为key,右列称为value.Map总是根据key获取对应的value.
 *
 * 常用实现类:
 * java.util.HashMap:使用散列算法实现的Map(常用)
 * java.util.TreeMap:使用二叉树实现的Map
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        /*
            V put(K k,V v)
            将一组键值对存入Map中.
            返回值为相同的key被替换的value
            由于Map要求key不允许重复(equals比较),因此在使用Map中已有的key存入一组键值对时,Map会替换
            这个key原来的value并将其返回.否则返回值为null.
         */
        //注意,Map中如果value的类型是包装类,不要用基本类型接收,避免因为自动拆箱导致空指针!
        Integer in = map.put("语文",99);//语文还不存在,所以没有任何替换的值,返回值为null
        System.out.println(in);
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",95);
        map.put("生物",98);
        //HashMap内部顺序与put顺序是不一致的
        System.out.println(map);

        in = map.put("数学",77);//重复的key会替换value,并将替换下来的值返回
        System.out.println(map);
        System.out.println(in);

        /*
            V get(Object key)
            根据key获取对应的value.
            如果给定的key不存在,返回值为null
         */
        in = map.get("语文");
        System.out.println("语文:"+in);
        in = map.get("体育");
        System.out.println("体育:"+in);


        int size = map.size();
        System.out.println(size);

        /*
            V remove(Object key)
            根据给定的key删除对应的键值对,返回值为这个key对应的value
         */
        in = map.remove("语文");
        System.out.println(map);
        System.out.println(in);

        boolean ck = map.containsKey("体育");
        System.out.println(ck);

    }
}









